import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidPooledConnection;

import java.sql.SQLException;

public class Main {
    public static void main(String[] args) {
        // 创建druid连接池对象   dataSource  数据源
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/jdbc?serverTimezone=GMT%2B8");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");

        // 初始化连接池的连接数量
        dataSource.setInitialSize(5);
        // 最大连接数量
        dataSource.setMaxActive(10);
        // 最大空闲连接数量
        dataSource.setMaxIdle(5);
        // 最小空闲连接数量
        dataSource.setMinIdle(1);
        // 最大等待时间  5000ms => 5s
        dataSource.setMaxWait(5000);
        // 验证连接是否可用
        dataSource.setValidationQuery("select 1");
        // 在获取连接的时候验证连接是否可用
        dataSource.setTestOnBorrow(true);
        // 在归还连接的时候验证连接是否可用
        dataSource.setTestOnReturn(true);
        // 在获取连接的时候验证连接是否可用
        dataSource.setTestWhileIdle(true);
        // 验证连接是否可用的时间间隔
        dataSource.setTimeBetweenEvictionRunsMillis(3000);
        // 最小空闲连接存活时间
        dataSource.setMinEvictableIdleTimeMillis(60000);
        // 是否移除泄露的连接
        dataSource.setRemoveAbandoned(true);
        // 泄露连接的存活时间
        dataSource.setRemoveAbandonedTimeout(1800);
        // 是否记录泄露连接的日志
        dataSource.setLogAbandoned(true);
        // 是否缓存 PreparedStatement
        dataSource.setPoolPreparedStatements(true);

        try {
            DruidPooledConnection connection = dataSource.getConnection();
            if (connection != null){
                System.out.println("连接成功");
            }else {
                System.out.println("连接失败");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
